Git Branch

शाखाएँ बनाना और प्रबंधित करना सीखें

Git Branch क्या हैं?

Git में, एक शाखा एक अलग कार्यशाला की तरह होती है जहाँ आप मुख्य प्रोजेक्ट को प्रभावित किए बिना बदलाव कर सकते हैं और नए विचारों को आज़मा सकते हैं। यह आपके कोड के लिए एक "समानांतर ब्रह्मांड" की तरह है।

शाखाओं का उपयोग क्यों करें?

शाखाएँ आपको किसी महत्वपूर्ण शाखा को बाधित किए बिना विभिन्न परियोजना भागों, नई सुविधाओं या बग फिक्स आदि पर काम करने की अनुमति देती हैं।

शाखा बनाने के सामान्य कारण

एक नई सुविधा का निर्माण

नए कार्यों का निर्माण

त्रुटि सुधार

दोषों का सुधार

विचारों का परीक्षण

नई अवधारणाओं का परीक्षण

उदाहरण: Git के साथ और उसके बिना

मान लीजिए कि आपके पास एक बड़ा प्रोजेक्ट है और आपको इसके डिज़ाइन को अपडेट करने की आवश्यकता है।

Git :

  • लाइव संस्करण को प्रभावित होने से बचाने के लिए सभी प्रासंगिक फ़ाइलों की प्रतियां बनाएं
  • डिज़ाइन के साथ काम करना शुरू करें और देखें कि कोड अन्य फ़ाइलों के कोड पर निर्भर करता है जिन्हें भी बदलने की आवश्यकता है!
  • आश्रित फ़ाइलों की प्रतिलिपियाँ भी बनाएँ। सुनिश्चित करें कि प्रत्येक फ़ाइल निर्भरता एक वैध फ़ाइल नाम निर्दिष्ट करती है
  • अति आवश्यक! प्रोजेक्ट में कहीं और एक असंबंधित बग है जिसे यथाशीघ्र ठीक करने की आवश्यकता है!
  • अपनी सभी फ़ाइलें सहेजें और उन प्रतियों के नाम चिह्नित करें जिन पर आपने काम किया है
  • किसी असंबंधित बग पर काम करें और उसे ठीक करने के लिए कोड को अपडेट करें
  • डिज़ाइन पर वापस लौटें और वहां काम ख़त्म करें
  • कोड को कॉपी करें या फ़ाइलों का नाम बदलें ताकि अद्यतन प्रारूप लाइव संस्करण में हो
  • (2 सप्ताह के बाद आपको एहसास होता है कि एक असंबंधित बग को ठीक करने के बाद नए डिज़ाइन संस्करण में उसे ठीक नहीं किया गया है)

Git :

  • न्यू-डिज़ाइन नामक एक नई शाखा के साथ, मुख्य शाखा को प्रभावित किए बिना सीधे कोड को संपादित करें
  • अति आवश्यक! प्रोजेक्ट में कहीं और एक असंबंधित बग है जिसे यथाशीघ्र ठीक करने की आवश्यकता है!
  • मुख्य प्रोजेक्ट से स्मॉल-एरर-फिक्स नामक एक नई शाखा बनाएं
  • एक असंबंधित बग को ठीक करें और छोटी-त्रुटि-फिक्स शाखा को महत्वपूर्ण शाखा में मर्ज करें
  • आप नई डिजाइन वाली शाखा में लौट आएं और वहां काम खत्म करें
  • नई-डिज़ाइन शाखा को महत्वपूर्ण शाखा में मर्ज करें (आपको एक मामूली बग फिक्स के बारे में सचेत किया जाएगा जो आपसे छूट गया है)

शाखाएँ आपको मुख्य शाखा को प्रभावित किए बिना विभिन्न परियोजना भागों पर काम करने की अनुमति देती हैं।

काम पूरा होने के बाद, एक शाखा को महत्वपूर्ण परियोजना से जोड़ा जा सकता है।

आप शाखाओं के बीच स्विच कर सकते हैं और एक-दूसरे के साथ हस्तक्षेप किए बिना विभिन्न परियोजनाओं पर काम कर सकते हैं।

Git में एक शाखा बनाना बहुत आसान और तेज़ है!

एक नई शाखा बनाना

मान लीजिए कि आप एक नई सुविधा जोड़ना चाहते हैं। आप उसके लिए एक नई शाखा बना सकते हैं.

आइए अपने Index.html पेज पर कुछ नई सुविधाएँ जोड़ें।

हम अपने स्थानीय भंडार पर काम कर रहे हैं और किसी महत्वपूर्ण परियोजना में गड़बड़ी या क्षति नहीं पहुंचाना चाहते।

तो हम एक नई शाखा बनाते हैं:

उदाहरण

git branch hello-world-images

अब हमने "हैलो-वर्ल्ड-इमेजेज" नाम से एक नई शाखा बनाई है।

सभी शाखाओं की सूची बनाना

आइए पुष्टि करें कि हमने एक नई शाखा बनाई है।

अपने भंडार में सभी शाखाएँ देखने के लिए:

उदाहरण

git branch
  hello-world-images
* master

हम "हैलो-वर्ल्ड-इमेजेज" नाम से एक नई शाखा देख सकते हैं, लेकिन मास्टर के आगे * इंगित करता है कि हम वर्तमान में उस शाखा पर हैं।

शाखाओं के बीच स्विच करना

चेकआउट एक कमांड है जिसका उपयोग किसी शाखा की जांच करने के लिए किया जाता है।

हमें वर्तमान शाखा से कमांड के अंत में निर्दिष्ट शाखा में ले जाता है:

उदाहरण

git checkout hello-world-images
Switched to branch 'hello-world-images'

अब आप महत्वपूर्ण शाखा को प्रभावित किए बिना अपनी नई शाखा पर काम कर सकते हैं।

एक शाखा में कार्यरत

अब हमने अपनी वर्तमान रिपॉजिटरी को मास्टर शाखा से नई शाखा में स्थानांतरित कर दिया है।

अपना पसंदीदा संपादक खोलें और कुछ बदलाव करें।

इस उदाहरण के लिए, हमने कार्य फ़ोल्डर में एक छवि (img_hello_world.jpg) जोड़ी और Index.html फ़ाइल में कोड की एक पंक्ति जोड़ी:

उदाहरण

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space"
style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>

</body>
</html>

हमने एक फ़ाइल में परिवर्तन किए हैं और कार्यशील निर्देशिका (महत्वपूर्ण शाखा के समान निर्देशिका) में एक नई फ़ाइल जोड़ी है।

अब वर्तमान शाखा की स्थिति जांचें:

उदाहरण

git status
On branch hello-world-images
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   index.html

Untracked files:
  (use "git add ..." to include in what will be committed)
        img_hello_world.jpg

no changes added to commit (use "git add" and/or "git commit -a")

तो आइए देखें यहां क्या होता है:

इसलिए हमें इस शाखा के लिए स्टेजिंग वातावरण में दो फ़ाइलें जोड़ने की आवश्यकता है:

उदाहरण

git add --all

अलग-अलग फ़ाइल नामों के बजाय --all का उपयोग करने से सभी संशोधित (नई, संशोधित और हटाई गई) फ़ाइलें चरणबद्ध हो जाएंगी।

शाखा की स्थिति जांचें:

उदाहरण

git status
On branch hello-world-images
Changes to be committed:
  (use "git restore --staged ..." to unstage)
    new file: img_hello_world.jpg
    modified: index.html

हम अपने बदलावों से खुश हैं. तो आइए उन्हें शाखा में समर्पित करें:

उदाहरण

git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg

अब हमारे पास एक नई शाखा है जो मास्टर शाखा से अलग है।

नोट:

चेकआउट में -b विकल्प का उपयोग करने से एक नई शाखा बन जाएगी और यदि यह मौजूद नहीं है तो इसे स्थानांतरित कर दिया जाएगा।

शाखाओं के बीच स्विच करना

अब देखते हैं कि विभिन्न शाखाओं के साथ काम करना कितना त्वरित और आसान है, और यह कितनी अच्छी तरह काम करता है।

हम वर्तमान में हैलो-वर्ल्ड-इमेजेज शाखा पर हैं। हमने इस शाखा में एक छवि जोड़ी है, इसलिए हम फ़ाइलों को वर्तमान निर्देशिका में सूचीबद्ध करेंगे:

उदाहरण

ls
README.md  bluestyle.css  img_hello_world.jpg  index.html

हम नई फ़ाइल img_hello_world.jpg देख सकते हैं और यदि हम html फ़ाइल खोलते हैं तो हम देख सकते हैं कि कोड बदल दिया गया है। सब कुछ वैसा ही है जैसा होना चाहिए.

अब, देखते हैं कि जब हम मास्टर बनने के लिए शाखा लगाते हैं तो क्या होता है।

उदाहरण

git checkout master
Switched to branch 'master'

नई छवि इस शाखा का हिस्सा नहीं है. वर्तमान निर्देशिका में फ़ाइलों को फिर से सूचीबद्ध करें:

उदाहरण

ls
README.md  bluestyle.css  index.html

img_hello_world.jpg ! html , .

देखें कि शाखाओं के साथ काम करना कितना आसान है? यह आपको विभिन्न चीज़ों पर काम करने की अनुमति कैसे देता है?

आपातकालीन शाखा

अब कल्पना करें कि हमने अभी तक हैलो-वर्ल्ड-इमेजेज का काम पूरा नहीं किया है, लेकिन हम मास्टर में एक बग को ठीक करना चाहते हैं।

मैं सीधे तौर पर मास्टर के साथ खिलवाड़ नहीं करना चाहता, और मैं हैलो-वर्ल्ड-इमेजेज के साथ भी खिलवाड़ नहीं करना चाहता क्योंकि यह अभी समाप्त नहीं हुआ है।

इसलिए हम भीड़ को संभालने के लिए एक नई शाखा बनाते हैं:

उदाहरण

git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'

अब हम मास्टर से एक नई शाखा बनाते हैं और उस पर स्विच करते हैं। आप अन्य शाखाओं को परेशान किए बिना त्रुटि को सुरक्षित रूप से ठीक कर सकते हैं।

आइए अपनी काल्पनिक त्रुटि को ठीक करें:

उदाहरण

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>

</body>
</html>

हमने इस फ़ाइल में परिवर्तन किए हैं और उन परिवर्तनों को मास्टर शाखा में भेजने की आवश्यकता है।

स्थिति जाँचिए:

उदाहरण

git status
On branch emergency-fix
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

फ़ाइल को चरणबद्ध करें, और प्रतिबद्ध करें:

उदाहरण

git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
 1 file changed, 1 insertion(+), 1 deletion(-)

अब मास्टर के लिए एक फिक्स तैयार है, और दोनों शाखाओं को मर्ज करने की आवश्यकता है।

एक शाखा हटाना

जब किसी शाखा के साथ काम पूरा हो जाए, तो इसे हटाया जा सकता है:

उदाहरण

git branch -d hello-world-images

इससे hello-world-images नाम की शाखा हट जाएगी (यदि यह पहले से ही लिंक है)।

शाखाओं के साथ काम करने की सर्वोत्तम प्रथाएँ

💡सर्वोत्तम प्रथाएं:

  • स्पष्ट, वर्णनात्मक शाखा नामों का उपयोग करें (जैसे फीचर/लॉगिन-पेज या बगफिक्स/हेडर-क्रैश)
  • प्रत्येक शाखा को एक ही उद्देश्य या सुविधा पर केंद्रित रखें
  • अपनी शाखा को अद्यतन रखने के लिए नियमित रूप से महत्वपूर्ण शाखाओं से परिवर्तन मर्ज करें
  • अपने भंडार को साफ़ रखने के लिए अब आपको उन शाखाओं को हटा दें जिनकी आपको आवश्यकता नहीं है

व्यावहारिक उदाहरण

शाखा का नाम बदलें

git branch -m old-name new-name

सभी शाखाओं की सूची बनाएं

git branch

शाखाएँ बदलें

git checkout branch-name git switch branch-name

शाखा हटाएँ (विलयित नहीं)

git branch -D branch-name

जांचें कि आप किस शाखा में हैं

git status

समस्या समाधान

⚠️ महत्वपूर्ण नोट्स:

  • यदि आप महत्वपूर्ण शाखा में अपने परिवर्तन नहीं देखते हैं, तो याद रखें: किसी शाखा में परिवर्तन तब तक वहीं रहते हैं जब तक आप उन्हें प्रतिबद्ध नहीं करते।
  • किसी शाखा को हटाते समय, सुनिश्चित करें कि पहले उसका विलय हो गया है। यदि आप किसी अनलिंक शाखा को हटाने का प्रयास करते हैं, तो Git आपको ऐसा करने से रोक देगा।
  • किसी अनलिंक शाखा को बाध्य करने के लिए, git शाखा -D शाखा-नाम का उपयोग करें।